package touchtouch;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

import wiiusej.Wiimote;
import wiiusej.wiiusejevents.physicalevents.ExpansionEvent;
import wiiusej.wiiusejevents.physicalevents.IREvent;
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent;
import wiiusej.wiiusejevents.physicalevents.WiimoteButtonsEvent;
import wiiusej.wiiusejevents.utils.WiimoteListener;
import wiiusej.wiiusejevents.wiiuseapievents.ClassicControllerInsertedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.ClassicControllerRemovedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.DisconnectionEvent;
import wiiusej.wiiusejevents.wiiuseapievents.GuitarHeroInsertedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.GuitarHeroRemovedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.NunchukInsertedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.NunchukRemovedEvent;
import wiiusej.wiiusejevents.wiiuseapievents.StatusEvent;

public class RawWiiInputListener implements WiimoteListener, ActionListener{

	public boolean is_tracking_finish = false;
	static public boolean is_event_processed = false;
	JPanel panel;
	Wiimote wiimote;

	int freq = 100; //frequence théorique
	int delay = new Double(1000 / freq).intValue(); //delais théorique entre deux événements (en ms)
	int eff_delay = new Double(delay * 2).intValue(); //delais effectif supposé entre deux événements (en ms)

	IREvent last_event;
	boolean event_occured = false; //détection d'un événement ou de l'absence d'un évenement

	long last_event_begin_at; // date du début de l'evt
	long last_event_end_at; // période depuis le début de l'evt
	long no_event_begin_at; // date du début de l'asence d'evt
	long no_event_end_at; // période depuis le début de l'absence d'evt

	Timer timer; // traite l'absence d'evt

	public RawWiiInputListener(JPanel panel, Wiimote wiimote){
		this.panel = panel;
		this.wiimote = wiimote;
		no_event_begin_at = System.currentTimeMillis();
		timer = new Timer (eff_delay, this);
		timer.start();
	}

	public void actionPerformed (ActionEvent event){
		// si pas de marque d'evt
		if (!event_occured)
			System.out.println("no");

		// si une marque de présence d'evt
		if (event_occured){
			// enlever la marque
			event_occured=false;
			System.out.println("yes" );
		}
	}

	synchronized public void onIrEvent(IREvent e) {
		event_occured = true;
		last_event = e;
	}

	public void onButtonsEvent(WiimoteButtonsEvent arg0) {}

	public void onClassicControllerInsertedEvent(ClassicControllerInsertedEvent arg0) {}

	public void onClassicControllerRemovedEvent(ClassicControllerRemovedEvent arg0) {}

	public void onDisconnectionEvent(DisconnectionEvent arg0) {}

	public void onExpansionEvent(ExpansionEvent arg0) {}

	public void onGuitarHeroInsertedEvent(GuitarHeroInsertedEvent arg0) {}

	public void onGuitarHeroRemovedEvent(GuitarHeroRemovedEvent arg0) {}

	public void onMotionSensingEvent(MotionSensingEvent arg0) {}

	public void onNunchukInsertedEvent(NunchukInsertedEvent arg0) {}

	public void onNunchukRemovedEvent(NunchukRemovedEvent arg0) {}

	public void onStatusEvent(StatusEvent arg0) {}

}
